home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland Pascal with Objects 7.0 / WHEREIS.ZIP / IDOS.MAC < prev    next >
Text File  |  1992-10-27  |  41KB  |  1,638 lines

  1.  
  2. ;   FILENAME: IDOS.MAC
  3. ;
  4. ;   Copyright (c) 1988, 1990 by Borland International, Inc.
  5. ;
  6. ;   DESCRIPTION: This include file contains various macros that may
  7. ;   be used to communicate with DOS. This include file uses Ideal mode
  8. ;   syntax. For documentation on each of the macros in this file see the
  9. ;   file DOSMAC.DOC.
  10. ;
  11. ;   NOTE: In order to use this macro file you must also include the files:
  12. ;   IMACROS.MAC, KBD.INC, and DOS.INC in your module.
  13. ;
  14.  
  15. macro   Terminate10Program
  16.     DosCall <DOS_PROGRAM_TERMINATE>
  17. endm
  18.  
  19. macro   ReadKBDEcho
  20.     DosCall <DOS_READ_KBD_ECHO>
  21. endm
  22.  
  23. macro   CharacterOutput Character
  24.     ifb <Character>
  25.         display "Caller must provide Character parameter to CharacterOutput."
  26.         err
  27.     else
  28.         mov     dl, Character
  29.         DosCall <DOS_WRITE_CHARACTER>
  30.     endif
  31. endm
  32.  
  33. macro   AuxiliaryInput
  34.     DosCall <DOS_AUXILIARY_INPUT>
  35. endm
  36.  
  37. macro   AuxiliaryOutput Character
  38.     ifb <Character>
  39.         display "Caller must provide Character parameter to AuxiliaryOutput."
  40.         err
  41.     else
  42.         mov     dl, <Character>
  43.         DosCall <DOS_AUXILIARY_OUTPUT>
  44.     endif
  45. endm
  46.  
  47. macro   PrinterOutput   Character
  48.     ifb <Character>
  49.         display "Caller must provide Character parameter to PrinterOutput."
  50.         err
  51.     else
  52.         mov     dl, <Character>
  53.         DosCall <DOS_PRINTER_OUTPUT>
  54.     endif
  55. endm
  56.  
  57. macro   ConsoleIO   Value
  58.     ifb <Value>
  59.         display "Caller must provide the Value parameter to ConsoleIO."
  60.         err
  61.     else
  62.         mov     dl, Value
  63.         DosCall <DOS_CONSOLE_IO>
  64.     endif
  65. endm
  66.  
  67. macro   UnfilteredCharInput
  68.     DosCall <DOS_UNFILTERED_INPUT>
  69. endm
  70.  
  71. macro   CharInputNoEcho
  72.     DosCall <DOS_CHARACTER_INPUT>
  73. endm
  74.  
  75. macro   WriteString StringSeg, StringOfs
  76.     macro   ErrMsg
  77.         display "You must provide the string address parameters to WriteString."
  78.         err
  79.     endm
  80.  
  81.     ifb <StringSeg>
  82.         ErrMsg
  83.     else
  84.         ifb <StringOfs>
  85.             ErrMsg
  86.         else
  87.             ifidni  <StringSeg>, <ds>
  88.                 ; Do nothing
  89.             else
  90.                 LoadSegment <ds>, <StringSeg>
  91.             endif
  92.             mov     dx, StringOfs
  93.             DosCall DOS_WRITE_STRING
  94.         endif
  95.     endif
  96. endm
  97.  
  98. macro   BufferedInput   StringSeg, StringOfs
  99.     macro   ErrMsg
  100.         display "Caller must provide the address parameters to BufferedInput."
  101.         err
  102.     endm
  103.  
  104.     ifb <StringSeg>
  105.         ErrMsg
  106.     else
  107.         ifb <StringOfs>
  108.             ErrMsg
  109.         else
  110.             ifidni  <ds>, <StringSeg>
  111.                 ; Do nothing
  112.             else
  113.                 LoadSegment <ds>, <StringSeg>
  114.             endif
  115.             mov     dx, StringOfs
  116.             DosCall <DOS_BUFFERED_INPUT>
  117.         endif
  118.     endif
  119. endm
  120.  
  121. macro   GetInputStatus
  122.     DosCall <DOS_GET_INPUT_STATUS>
  123. endm
  124.  
  125. macro   ResetInputBuffer    Function, StringSeg, StringOfs
  126.     ifb <Function>
  127.         display "Caller must provide the Function parameter to ResetInputBuffer."
  128.         err
  129.     else
  130.         ifb <StringSeg>
  131.             mov     al, Function
  132.         else
  133.             ifb <StringOfs>
  134.                 display "Caller must provide the StringOfs parameter to ResetInputBuffer."
  135.                 err
  136.             else
  137.                 ifidni  <ds>, <StringSeg>
  138.                     ; Do nothing
  139.                 else
  140.                     LoadSegment <ds>, <StringSeg>
  141.                 endif
  142.                 mov     dx, StringOfs
  143.             endif
  144.         endif
  145.         DosCall <DOS_RESET_INPUT>
  146.     endif
  147. endm
  148.  
  149. macro   ResetDisk
  150.     DosCall <DOS_DISK_RESET>
  151. endm
  152.  
  153. macro   ChangeDrive Drive
  154.     ifb <Drive>
  155.         display "You must provide the Drive parameter to ChangeDrive."
  156.         err
  157.     else
  158.         mov     dl, Drive
  159.         DosCall DOS_CHANGE_DISK_DRIVE
  160.     endif
  161. endm
  162.  
  163. macro   OpenFCBFile FCBSeg, FCBOfs
  164.     macro   ErrMsg
  165.         display "Caller must provide FCB address to OpenFCBFile."
  166.         err
  167.     endm
  168.  
  169.     ifb <FCBSeg>
  170.         ErrMsg
  171.     else
  172.         ifb <FCBOfs>
  173.             ErrMsg
  174.         else
  175.             ifidni  <ds>, <FCBSeg>
  176.                 ; Do nothing
  177.             else
  178.                 LoadSegment <ds>, <FCBSeg>
  179.             endif
  180.             mov     dx, FCBOfs
  181.             DosCall <DOS_OPEN_FCB_FILE>
  182.         endif
  183.     endif
  184. endm
  185.  
  186. macro   CloseFCBFile    FCBSeg, FCBOfs
  187.     macro   ErrMsg
  188.         display "Caller must provide FCB address to CloseFCBFile."
  189.         err
  190.     endm
  191.  
  192.     ifb <FCBSeg>
  193.         ErrMsg
  194.     else
  195.         ifb <FCBOfs>
  196.             ErrMsg
  197.         else
  198.             ifidni  <ds>, <FCBSeg>
  199.                 ; Do nothing
  200.             else
  201.                 LoadSegment <ds>, <FCBSeg>
  202.             endif
  203.             mov     dx, FCBOfs
  204.             DosCall <DOS_CLOSE_FCB_FILE>
  205.         endif
  206.     endif
  207. endm
  208.  
  209. macro   FindFirstFCB    FCBSeg, FCBOfs
  210.     macro   ErrMsg
  211.         display "Caller must provide FCB address to FindFirstFCB."
  212.         err
  213.     endm
  214.  
  215.     ifb <FCBSeg>
  216.         ErrMsg
  217.     else
  218.         ifb <FCBOfs>
  219.             ErrMsg
  220.         else
  221.             ifidni  <ds>, <FCBSeg>
  222.                 ; Do nothing
  223.             else
  224.                 LoadSegment <ds>, <FCBSeg>
  225.             endif
  226.             mov     dx, FCBOfs
  227.             DosCall <DOS_FIND_FIRST_FCB>
  228.         endif
  229.     endif
  230. endm
  231.  
  232. macro   FindNextFCB    FCBSeg, FCBOfs
  233.     macro   ErrMsg
  234.         display "Caller must provide FCB address to FindNextFCB."
  235.         err
  236.     endm
  237.  
  238.     ifb <FCBSeg>
  239.         ErrMsg
  240.     else
  241.         ifb <FCBOfs>
  242.             ErrMsg
  243.         else
  244.             ifidni  <ds>, <FCBSeg>
  245.                 ; Do nothing
  246.             else
  247.                 LoadSegment <ds>, <FCBSeg>
  248.             endif
  249.             mov     dx, FCBOfs
  250.             DosCall <DOS_FIND_NEXT_FCB>
  251.         endif
  252.     endif
  253. endm
  254.  
  255. macro   DeleteFCBFile    FCBSeg, FCBOfs
  256.     macro   ErrMsg
  257.         display "Caller must provide FCB address to DeleteFCBFile."
  258.         err
  259.     endm
  260.  
  261.     ifb <FCBSeg>
  262.         ErrMsg
  263.     else
  264.         ifb <FCBOfs>
  265.             ErrMsg
  266.         else
  267.             ifidni  <ds>, <FCBSeg>
  268.                 ; Do nothing
  269.             else
  270.                 LoadSegment <ds>, <FCBSeg>
  271.             endif
  272.             mov     dx, FCBOfs
  273.             DosCall <DOS_DELETE_FCB_FILE>
  274.         endif
  275.     endif
  276. endm
  277.  
  278. macro   SequentialFCBRead   FCBSeg, FCBOfs
  279.     macro   ErrMsg
  280.         display "Caller must provide FCB address to SequentialFCBRead."
  281.         err
  282.     endm
  283.  
  284.     ifb <FCBSeg>
  285.         ErrMsg
  286.     else
  287.         ifb <FCBOfs>
  288.             ErrMsg
  289.         else
  290.             ifidni  <ds>, <FCBSeg>
  291.                 ; Do nothing
  292.             else
  293.                 LoadSegment <ds>, <FCBSeg>
  294.             endif
  295.             mov     dx, FCBOfs
  296.             DosCall <DOS_SEQUENTIAL_READ>
  297.         endif
  298.     endif
  299. endm
  300.  
  301. macro   SequentialFCBWrite  FCBSeg, FCBOfs
  302.     macro   ErrMsg
  303.         display "Caller must provide FCB address to SequentialFCBWrite."
  304.         err
  305.     endm
  306.  
  307.     ifb <FCBSeg>
  308.         ErrMsg
  309.     else
  310.         ifb <FCBOfs>
  311.             ErrMsg
  312.         else
  313.             ifidni  <ds>, <FCBSeg>
  314.                 ; Do nothing
  315.             else
  316.                 LoadSegment <ds>, <FCBSeg>
  317.             endif
  318.             mov     dx, FCBOfs
  319.             DosCall <DOS_SEQUENTIAL_WRITE>
  320.         endif
  321.     endif
  322. endm
  323.  
  324. macro   CreateFCBFile   FCBSeg, FCBOfs
  325.     macro   ErrMsg
  326.         display "Caller must provide FCB address to CreateFCBFile."
  327.         err
  328.     endm
  329.  
  330.     ifb <FCBSeg>
  331.         ErrMsg
  332.     else
  333.         ifb <FCBOfs>
  334.             ErrMsg
  335.         else
  336.             ifidni  <ds>, <FCBSeg>
  337.                 ; Do nothing
  338.             else
  339.                 LoadSegment <ds>, <FCBSeg>
  340.             endif
  341.             mov     dx, FCBOfs
  342.             DosCall <DOS_CREATE_FCB_FILE>
  343.         endif
  344.     endif
  345. endm
  346.  
  347. macro   RenameFCBFile   FCBSeg, FCBOfs
  348.     macro   ErrMsg
  349.         display "Caller must provide FCB address to RenameFCBFile."
  350.         err
  351.     endm
  352.  
  353.     ifb <FCBSeg>
  354.         ErrMsg
  355.     else
  356.         ifb <FCBOfs>
  357.             ErrMsg
  358.         else
  359.             ifidni  <ds>, <FCBSeg>
  360.                 ; Do nothing
  361.             else
  362.                 LoadSegment <ds>, <FCBSeg>
  363.             endif
  364.             mov     dx, FCBOfs
  365.             DosCall <DOS_RENAME_FCB_FILE>
  366.         endif
  367.     endif
  368. endm
  369.  
  370. macro   GetDrive
  371.     DosCall <DOS_GET_DISK_DRIVE>
  372. endm
  373.  
  374. macro   SetDTA  DTASeg, DTAOfs
  375.     macro   ErrMsg
  376.         display "You must provide the DTASeg:DTAOfs parameters to SetDTA."
  377.         err
  378.     endm
  379.  
  380.     ifb <DTASeg>
  381.         ErrMsg
  382.     else
  383.         ifb <DTAOfs>
  384.             ErrMsg
  385.         else
  386.  
  387.             ; First check if the parameter is a register. If it is then
  388.             ; push it and pop the value into ds. If not check if it's a
  389.             ; constant or variable and act accordingly.
  390.  
  391.             ifidni  <ds>, <DTASeg>
  392.                 ; Do nothing
  393.             else
  394.                 LoadSegment <ds>, <DTASeg>
  395.             endif
  396.             mov     dx, DTAOfs              ; Get offset of DTA
  397.             DosCall DOS_SET_DTA             ; Set new DTA address
  398.         endif
  399.     endif
  400. endm
  401.  
  402. macro   DefaultDiskAllocation
  403.     DosCall <DOS_DEFAULT_DRIVE_INFO>
  404. endm
  405.  
  406. macro   DiskAllocation  Drive
  407.     ifb <Drive>
  408.         display "Caller must provide Drive parameter to DiskAllocation."
  409.         err
  410.     else
  411.         mov     dl, Drive
  412.         DosCall <DOS_DRIVE_INFO>
  413.     endif
  414. endm
  415.  
  416. macro   RandomFCBRead   FCBSeg, FCBOfs
  417.     macro   ErrMsg
  418.         display "Caller must provide FCB address to RandomFCBRead."
  419.         err
  420.     endm
  421.  
  422.     ifb <FCBSeg>
  423.         ErrMsg
  424.     else
  425.         ifb <FCBOfs>
  426.             ErrMsg
  427.         else
  428.             ifidni  <ds>, <FCBSeg>
  429.                 ; Do nothing
  430.             else
  431.                 LoadSegment <ds>, <FCBSeg>
  432.             endif
  433.             mov     dx, FCBOfs
  434.             DosCall <DOS_RANDOM_READ>
  435.         endif
  436.     endif
  437. endm
  438.  
  439. macro   RandomFCBWrite  FCBSeg, FCBOfs
  440.     macro   ErrMsg
  441.         display "Caller must provide FCB address to RandomFCBWrite."
  442.         err
  443.     endm
  444.  
  445.     ifb <FCBSeg>
  446.         ErrMsg
  447.     else
  448.         ifb <FCBOfs>
  449.             ErrMsg
  450.         else
  451.             ifidni  <ds>, <FCBSeg>
  452.                 ; Do nothing
  453.             else
  454.                 LoadSegment <ds>, <FCBSeg>
  455.             endif
  456.             mov     dx, FCBOfs
  457.             DosCall <DOS_RANDOM_WRITE>
  458.         endif
  459.     endif
  460. endm
  461.  
  462. macro   GetFCBFileSize  FCBSeg, FCBOfs
  463.     macro   ErrMsg
  464.         display "Caller must provide FCB address to GetFCBFileSize."
  465.         err
  466.     endm
  467.  
  468.     ifb <FCBSeg>
  469.         ErrMsg
  470.     else
  471.         ifb <FCBOfs>
  472.             ErrMsg
  473.         else
  474.             ifidni  <ds>, <FCBSeg>
  475.                 ; Do nothing
  476.             else
  477.                 LoadSegment <ds>, <FCBSeg>
  478.             endif
  479.             mov     dx, FCBOfs
  480.             DosCall <DOS_GET_FILE_SIZE>
  481.         endif
  482.     endif
  483. endm
  484.  
  485. macro   SetFCBFileRecord    FCBSeg, FCBOfs
  486.     macro   ErrMsg
  487.         display "Caller must provide FCB address to SetFCBFileRecord."
  488.         err
  489.     endm
  490.  
  491.     ifb <FCBSeg>
  492.         ErrMsg
  493.     else
  494.         ifb <FCBOfs>
  495.             ErrMsg
  496.         else
  497.             ifidni  <ds>, <FCBSeg>
  498.                 ; Do nothing
  499.             else
  500.                 LoadSegment <ds>, <FCBSeg>
  501.             endif
  502.             mov     dx, FCBOfs
  503.             DosCall <DOS_SET_RECORD_NUMBER>
  504.         endif
  505.     endif
  506. endm
  507.  
  508. macro   SetVector   Vector, VectorSeg, VectorOfs
  509.     macro   ErrMsg
  510.         display "You must provide the Vector, VectorSeg and VectorOfs parameters to SetVector."
  511.         err
  512.     endm
  513.  
  514.     ifb <Vector>
  515.         ErrMsg
  516.     else
  517.         ifb <VectorSeg>
  518.             ErrMsg
  519.         else
  520.             ifb <VectorOfs>
  521.                 ErrMsg
  522.             else
  523.                 ifidni  <ds>, <VectorSeg>
  524.                     ; Do nothing
  525.                 else
  526.                     LoadSegment <ds>, <VectorSeg>
  527.                 endif
  528.                 mov     dx, VectorOfs
  529.                 mov     al,Vector        ; Load the number of the vector
  530.                 DosCall DOS_SET_VECTOR
  531.             endif
  532.         endif
  533.     endif
  534. endm
  535.  
  536. macro   CreatePSP   PSPSeg
  537.     ifb <PSPSeg>
  538.         display "Caller must provide PSPSeg parameter to CreatePSP."
  539.         err
  540.     else
  541.         mov     dx, <PSPSeg>
  542.         DosCall <DOS_CREATE_PSP>
  543.     endif
  544. endm
  545.  
  546. macro   RandomFCBBlockRead  FCBSeg, FCBOfs, Count
  547.     macro   ErrMsg
  548.         display "Caller must provide FCB address to RandomFCBBlockRead."
  549.         err
  550.     endm
  551.  
  552.     ifb <FCBSeg>
  553.         ErrMsg
  554.     else
  555.         ifb <FCBOfs>
  556.             ErrMsg
  557.         else
  558.             ifb <Count>
  559.                 ErrMsg
  560.             else
  561.                 ifidni  <ds>, <FCBSeg>
  562.                     ; Do nothing
  563.                 else
  564.                     LoadSegment <ds>, <FCBSeg>
  565.                 endif
  566.                 mov     dx, FCBOfs
  567.                 mov     cx, Count
  568.                 DosCall <DOS_RANDOM_BLOCK_READ>
  569.             endif
  570.         endif
  571.     endif
  572. endm
  573.  
  574. macro   RandomFCBBlockWrite FCBSeg, FCBOfs, Count
  575.     macro   ErrMsg
  576.         display "Caller must provide FCB address to RandomFCBBlockWrite."
  577.         err
  578.     endm
  579.  
  580.     ifb <FCBSeg>
  581.         ErrMsg
  582.     else
  583.         ifb <FCBOfs>
  584.             ErrMsg
  585.         else
  586.             ifb <Count>
  587.                 ErrMsg
  588.             else
  589.                 ifidni  <ds>, <FCBSeg>
  590.                     ; Do nothing
  591.                 else
  592.                     LoadSegment <ds>, <FCBSeg>
  593.                 endif
  594.                 mov     dx, FCBOfs
  595.                 mov     cx, Count
  596.                 DosCall <DOS_RANDOM_BLOCK_WRITE>
  597.             endif
  598.         endif
  599.     endif
  600. endm
  601.  
  602. macro   ParseFCBFilename    Flags, FilenameSeg, FilenameOfs, FCBSeg, FCBOfs
  603.     macro   ErrMsg
  604.         display "Caller must provide the Flags and address parameters to ParseFCBFilename."
  605.         err
  606.     endm
  607.  
  608.     ifb <Flags>
  609.         ErrMsg
  610.     else
  611.         ifb <FilenameSeg>
  612.             ErrMsg
  613.         else
  614.             ifb <FilenameOfs>
  615.                 ErrMsg
  616.             else
  617.                 ifb <FCBSeg>
  618.                     ErrMsg
  619.                 else
  620.                     ifb <FCBOfs>
  621.                         ErrMsg
  622.                     else
  623.                         LoadSegment <es>, <FCBSeg>
  624.                         mov     di, FCBOfs
  625.                         LoadSegment <ds>, <FilenameSeg>
  626.                         mov     si, FilenameOfs
  627.                         mov     al, Flags
  628.                         DosCall <DOS_PARSE_FILENAME>
  629.                     endif
  630.                 endif
  631.             endif
  632.         endif
  633.     endif
  634. endm
  635.  
  636. macro   GetDate
  637.     DosCall <DOS_GET_DATE>
  638. endm
  639.  
  640. macro   SetDate Year, Month, Day
  641.     macro   ErrMsg
  642.         display "Caller must provide Year, Month and Day parameters to SetDate."
  643.         err
  644.     endm
  645.  
  646.     ifb <Year>
  647.         ErrMsg
  648.     else
  649.         ifb <Month>
  650.             ErrMsg
  651.         else
  652.             ifb <Day>
  653.                 ErrMsg
  654.             else
  655.                 mov     cx, Year
  656.                 mov     dh, Month
  657.                 mov     dl, Day
  658.                 DosCall <DOS_SET_DATE>
  659.             endif
  660.         endif
  661.     endif
  662. endm
  663.  
  664. macro   GetTime
  665.     DosCall <DOS_GET_TIME>
  666. endm
  667.  
  668. macro   SetTime Hour, Minute, Second, Hundredth
  669.     macro   ErrMsg
  670.         display "Caller must provide Hour, Minute, Second and Hundredth parameters to SetTime."
  671.         err
  672.     endm
  673.  
  674.     ifb <Hour>
  675.         ErrMsg
  676.     else
  677.         ifb <Minute>
  678.             ErrMsg
  679.         else
  680.             ifb <Second>
  681.                 ErrMsg
  682.             else
  683.                 ifb <Hundredth>
  684.                     ErrMsg
  685.                 else
  686.                     mov     ch, Hour
  687.                     mov     cl, Minute
  688.                     mov     dh, Second
  689.                     mov     dl, Hundredth
  690.                     DosCall <DOS_SET_TIME>
  691.                 endif
  692.             endif
  693.         endif
  694.     endif
  695. endm
  696.  
  697. macro   SetVerifyFlag   Flag
  698.     ifb <Flag>
  699.         display "Caller must provide Flag parameter to SetVerifyFlag."
  700.         err
  701.     else
  702.         xor     dl, dl
  703.         mov     al, Flag
  704.         DosCall <DOS_SET_VERIFY_FLAG>
  705.     endif
  706. endm
  707.  
  708. macro   GetDTA
  709.     DosCall DOS_GET_DTA
  710. endm
  711.  
  712. macro   GetDOSVersion
  713.     DosCall DOS_GET_DOS_VERSION
  714. endm
  715.  
  716. macro   TSR Result, Paragraphs
  717.     macro   ErrMsg
  718.         display "Caller must provide Result and Paragraphs parameters to TSR."
  719.         err
  720.     endm
  721.  
  722.     ifb <Result>
  723.         ErrMsg
  724.     else
  725.         ifb <Paragraphs>
  726.             ErrMsg
  727.         else
  728.             mov     al, Result
  729.             mov     dx, Paragraphs
  730.             DosCall <DOS_KEEP>
  731.         endif
  732.     endif
  733. endm
  734.  
  735. macro   GetSetBREAK Mode, Value
  736.     ifb <Mode>
  737.         display "Caller must provide Mode and optionally Value parameters to GetSetBREAK."
  738.         err
  739.     else
  740.         ifnb    <Value>
  741.             mov     dl, Value
  742.         endif
  743.         mov     al, Mode
  744.         DosCall <DOS_GET_SET_CTRL_BREAK>
  745.     endif
  746. endm
  747.  
  748. macro   GetVector   Interrupt
  749.     ifb <Interrupt>
  750.         display "Caller must provide Interrupt parameter to GetVector."
  751.         err
  752.     else
  753.         mov     al, Interrupt
  754.         DosCall <DOS_GET_VECTOR>
  755.     endif
  756. endm
  757.  
  758. macro   GetDiskSpace    Disk
  759.     ifb <Disk>
  760.         display "Caller must provide Disk parameter to GetDiskSpace."
  761.         err
  762.     else
  763.         mov     dl, Disk
  764.         DosCall <DOS_GET_DISK_SPACE>
  765.     endif
  766. endm
  767.  
  768. macro   GetSetCountryInfo   BufferSeg, BufferOfs, ShortCode, LongCode
  769.     macro   ErrMsg
  770.         display "Caller must provide the buffer address and country code parameters"
  771.         display "to GetSetCountryInfo."
  772.         err
  773.     endm
  774.  
  775.     ifb <BufferSeg>
  776.         ErrMsg
  777.     else
  778.         ifb <BufferOfs>
  779.             ErrMsg
  780.         else
  781.             ifb <ShortCode>
  782.                 ErrMsg
  783.             else
  784.                 ifnb    <LongCode>
  785.                     mov     bx, LongCode
  786.                 endif
  787.                 mov     al, ShortCode
  788.                 LoadSegment <ds>, <BufferSeg>
  789.                 mov     dx, BufferOfs
  790.                 DosCall <DOS_GET_SET_COUNTRY>
  791.             endif
  792.         endif
  793.     endif
  794. endm
  795.  
  796. macro   CreateDir   StringSeg, StringOfs
  797.     macro   ErrMsg
  798.         display "You must provide address parameters to CreateDir."
  799.         err
  800.     endm
  801.  
  802.     ifb <StringSeg>
  803.         ErrMsg
  804.     else
  805.         ifb <StringOfs>
  806.             ErrMsg
  807.         else
  808.             ifidni  <ds>, <StringSeg>
  809.                 ; Do nothing
  810.             else
  811.                 LoadSegment <ds>, <StringSeg>
  812.             endif
  813.             mov     dx, StringOfs
  814.             DosCall DOS_MAKE_DIRECTORY
  815.         endif
  816.     endif
  817. endm
  818.  
  819. macro   RemoveDir   StringSeg, StringOfs
  820.     macro   ErrMsg
  821.         display "You must provide address parameters to RemoveDir."
  822.         err
  823.     endm
  824.  
  825.     ifb <StringSeg>
  826.         ErrMsg
  827.     else
  828.         ifb <StringOfs>
  829.             ErrMsg
  830.         else
  831.             ifidni  <ds>, <StringSeg>
  832.                 ; Do nothing
  833.             else
  834.                 LoadSegment <ds>, <StringSeg>
  835.             endif
  836.             mov     dx, StringOfs
  837.             DosCall DOS_DELETE_DIRECTORY
  838.         endif
  839.     endif
  840. endm
  841.  
  842. macro   ChangeDirectory StringSeg, StringOfs
  843.     macro   ErrMsg
  844.         display "You must provide the segment and offset of the new path to ChangeDirectory."
  845.         err
  846.     endm
  847.  
  848.     ifb <StringSeg>
  849.         ErrMsg
  850.     else
  851.         ifb <StringOfs>
  852.             ErrMsg
  853.         else
  854.             ifidni  <ds>, <StringSeg>
  855.                 ; Do nothing
  856.             else
  857.                 LoadSegment <ds>, <StringSeg>
  858.             endif
  859.             mov     dx, StringOfs           ; Store the offset of the
  860.             DosCall DOS_SET_CURRENT_DIR     ; new path
  861.         endif
  862.     endif
  863. endm
  864.  
  865.  
  866. macro   CreateFile  Attributes, StringSeg, StringOfs
  867.     macro   ErrMsg
  868.         display "You must provide Attributes and address parameters to CreateFile."
  869.         err
  870.     endm
  871.  
  872.     ifb <Attributes>
  873.         ErrMsg
  874.     else
  875.         ifb <StringSeg>
  876.             ErrMsg
  877.         else
  878.             ifb <StringOfs>
  879.                 ErrMsg
  880.             else
  881.                 ifidni  <ds>, <StringSeg>
  882.                     ; Do nothing
  883.                 else
  884.                     LoadSegment <ds>, <StringSeg>
  885.                 endif
  886.                 mov     dx, StringOfs
  887.                 mov     cx, Attributes
  888.                 DosCall DOS_CREATE_FILE
  889.             endif
  890.         endif
  891.     endif
  892. endm
  893.  
  894. macro   OpenFile  AccessMode, StringSeg, StringOfs
  895.     macro   ErrMsg
  896.         display "You must provide AccessMode and address parameters to OpenFile."
  897.         err
  898.     endm
  899.  
  900.     ifb <AccessMode>
  901.         ErrMsg
  902.     else
  903.         ifb <StringSeg>
  904.             ErrMsg
  905.         else
  906.             ifb <StringOfs>
  907.                 ErrMsg
  908.             else
  909.                 ifidni  <ds>, <StringSeg>
  910.                     ; Do nothing
  911.                 else
  912.                     LoadSegment <ds>, <StringSeg>
  913.                 endif
  914.                 mov     dx, StringOfs
  915.                 mov     al, AccessMode
  916.                 DosCall DOS_OPEN_FILE
  917.             endif
  918.         endif
  919.     endif
  920. endm
  921.  
  922. macro   CloseFile   Handle
  923.     ifb <Handle>
  924.         display "You must provide a file handle to CloseFile."
  925.         err
  926.     else
  927.         mov     bx, Handle
  928.         DosCall DOS_CLOSE_FILE
  929.     endif
  930. endm
  931.  
  932. macro   ReadFile    Handle, Count, StringSeg, StringOfs
  933.     macro   ErrMsg
  934.         display "You must provide Handle, Count and address parameters to ReadFile."
  935.         err
  936.     endm
  937.  
  938.     ifb <Handle>
  939.         ErrMsg
  940.     else
  941.         ifb <Count>
  942.             ErrMsg
  943.         else
  944.             ifb <StringSeg>
  945.                 ErrMsg
  946.             else
  947.                 ifb <StringOfs>
  948.                     ErrMsg
  949.                 else
  950.                     ifidni  <ds>, <StringSeg>
  951.                         ; Do nothing
  952.                     else
  953.                         LoadSegment <ds>, <StringSeg>
  954.                     endif
  955.                     mov     dx, StringOfs
  956.                     mov     cx, Count
  957.                     mov     bx, Handle
  958.                     DosCall DOS_READ_FROM_HANDLE
  959.                 endif
  960.             endif
  961.         endif
  962.     endif
  963. endm
  964.  
  965. macro   WriteFile    Handle, Count, StringSeg, StringOfs
  966.     macro   ErrMsg
  967.         display "You must provide Handle, Count and address parameters to WriteFile."
  968.         err
  969.     endm
  970.  
  971.     ifb <Handle>
  972.         ErrMsg
  973.     else
  974.         ifb <Count>
  975.             ErrMsg
  976.         else
  977.             ifb <StringSeg>
  978.                 ErrMsg
  979.             else
  980.                 ifb <StringOfs>
  981.                     ErrMsg
  982.                 else
  983.                     ifidni  <ds>, <StringSeg>
  984.                         ; Do nothing
  985.                     else
  986.                         LoadSegment <ds>, <StringSeg>
  987.                     endif
  988.                     mov     dx, StringOfs
  989.                     mov     cx, Count
  990.                     mov     bx, Handle
  991.                     DosCall DOS_WRITE_TO_HANDLE
  992.                 endif
  993.             endif
  994.         endif
  995.     endif
  996. endm
  997.  
  998. macro   DeleteFile  StringSeg, StringOfs
  999.     macro   ErrMsg
  1000.         display "You must provide address parameters to OpenFile."
  1001.         err
  1002.     endm
  1003.  
  1004.     ifb <StringSeg>
  1005.         ErrMsg
  1006.     else
  1007.         ifb <StringOfs>
  1008.             ErrMsg
  1009.         else
  1010.             ifidni  <ds>, <StringSeg>
  1011.                 ; Do nothing
  1012.             else
  1013.                 LoadSegment <ds>, <StringSeg>
  1014.             endif
  1015.             mov     dx, StringOfs
  1016.             DosCall DOS_DELETE_FILE
  1017.         endif
  1018.     endif
  1019. endm
  1020.  
  1021. macro   MoveFilePtr Mode, Handle, OffsetHigh, OffsetLow
  1022.     macro   ErrMsg
  1023.         display "You must provide Mode, Handle and offset parameters to MoveFilePtr."
  1024.         err
  1025.     endm
  1026.  
  1027.     ifb <Mode>
  1028.         ErrMsg
  1029.     else
  1030.         ifb <Handle>
  1031.             ErrMsg
  1032.         else
  1033.             ifb <OffsetHigh>
  1034.                 ErrMsg
  1035.             else
  1036.                 ifb <OffsetLow>
  1037.                     ErrMsg
  1038.                 else
  1039.                     mov     al, Mode
  1040.                     mov     bx, Handle
  1041.                     mov     cx, OffsetHigh
  1042.                     mov     dx, OffsetLow
  1043.                     DosCall DOS_MOVE_FILE_POINTER
  1044.                 endif
  1045.             endif
  1046.         endif
  1047.     endif
  1048. endm
  1049.  
  1050. macro   GetSetAttributes    Mode, Attributes, StringSeg, StringOfs
  1051.     macro   ErrMsg
  1052.         display "You must provide Mode, Attribute and address parameters to GetSetAttributes."
  1053.         err
  1054.     endm
  1055.  
  1056.     ifb <Mode>
  1057.         ErrMsg
  1058.     else
  1059.         ifb <Attributes>
  1060.             ErrMsg
  1061.         else
  1062.             ifb <StringSeg>
  1063.                 ErrMsg
  1064.             else
  1065.                 ifb <StringOfs>
  1066.                     ErrMsg
  1067.                 else
  1068.                     ifidni  <ds>, <StringSeg>
  1069.                         ; Do nothing
  1070.                     else
  1071.                         LoadSegment <ds>, <StringSeg>
  1072.                     endif
  1073.                     mov     dx, StringOfs
  1074.                     mov     al, Mode
  1075.                     cmp     al, 1
  1076.                     mov     cx, Attributes
  1077.                     DosCall DOS_GET_SET_ATTRIBUTES
  1078.                 endif
  1079.             endif
  1080.         endif
  1081.     endif
  1082. endm
  1083.  
  1084. macro   IOCTL   Function, HandleDrive, Count, BufSegDevInfo, BufferOfs
  1085.     macro   ErrMsg
  1086.         display "Caller must provide Function, HandleDrive, Count, BufferSeg,"
  1087.         display "BufferOfs and DeviceInfo parameters to IOCTL."
  1088.         err
  1089.     endm
  1090.  
  1091.     ifb <Function>
  1092.         ErrMsg
  1093.     else
  1094.         ifb <HandlDrive>
  1095.             ErrMsg
  1096.         else
  1097.             ifb <Count>
  1098.                 ErrMsg
  1099.             else
  1100.                 ifnb    <BufferOfs>                   ; Assume that the buffer
  1101.                     LoadSegment <ds>, <BufSegDevInfo> ; address parameters are
  1102.                     mov     dx, BufferOfs             ; are defined
  1103.                 else                                  ; Assume that the Device
  1104.                     mov     dx, BufSegDevinfo         ; information parameter
  1105.                 endif                                 ; is defined
  1106.                 mov     al, Function
  1107.                 mov     bx, HandleDrive
  1108.                 mov     cx, Count
  1109.                 DosCall <DOS_IOCTL>
  1110.             endif
  1111.         endif
  1112.     endif
  1113. endm
  1114.  
  1115. macro   DuplicateHandle Handle
  1116.     ifb <Handle>
  1117.         display "Caller must provide Handle parameter to DuplicateHandle."
  1118.         err
  1119.     else
  1120.         mov     bx, Handle
  1121.         DosCall <DOS_DUPLICATE_HANDLE>
  1122.     endif
  1123. endm
  1124.  
  1125. macro   ForceDupHandle  OriginalHandle, HandleCopy
  1126.     macro   ErrMsg
  1127.         display "Caller must provide handle parameters to ForceDupHandle."
  1128.         err
  1129.     endm
  1130.  
  1131.     ifb <Original>
  1132.         ErrMsg
  1133.     else
  1134.         ifb <Copy>
  1135.             ErrMsg
  1136.         else
  1137.             mov     bx, OriginalHandle
  1138.             mov     cx, HandleCopy
  1139.             DosCall <DOS_FORCE_DUP_HANDLE>
  1140.         endif
  1141.     endif
  1142. endm
  1143.  
  1144. macro   GetCurrentDir   Drive, StringSeg, StringOfs
  1145.     macro   ErrMsg
  1146.         display "You must provide Drive and address parameters to GetCurrentDir."
  1147.         err
  1148.     endm
  1149.  
  1150.     ifb <Drive>
  1151.         ErrMsg
  1152.     else
  1153.         ifb <StringSeg>
  1154.             ErrMsg
  1155.         else
  1156.             ifb <StringOfs>
  1157.                 ErrMsg
  1158.             else
  1159.                 ifidni  <ds>, <StringSeg>
  1160.                     ; Do nothing
  1161.                 else
  1162.                     LoadSegment <ds>, <StringSeg>
  1163.                 endif
  1164.                 mov     si, StringOfs
  1165.                 mov     dl, Drive
  1166.                 DosCall DOS_GET_DIRECTORY
  1167.             endif
  1168.         endif
  1169.     endif
  1170. endm
  1171.  
  1172. macro   AllocateMemory  Paragraphs
  1173.     ifb <Paragraphs>
  1174.         display "You must provide the number of paragraphs to AllocateMemory."
  1175.         err
  1176.     else
  1177.         mov     bx, Paragraphs
  1178.         DosCall DOS_ALLOCATE_MEMORY
  1179.     endif
  1180. endm
  1181.  
  1182. macro   FreeMemory  BlockAddress
  1183.     ifb <BlockAddress>
  1184.         display "You must provide the BlockAddress parameter to FreeMemory."
  1185.         err
  1186.     else
  1187.         LoadSegment <es>, <BlockAddress>
  1188.         DosCall DOS_FREE_MEMORY
  1189.     endif
  1190. endm
  1191.  
  1192. macro   ModifyMemory    Size, MemoryBlock
  1193.     macro   ErrMsg
  1194.         display "You must provide the Size and MemoryBlock parameters to ModifyMemory."
  1195.         err
  1196.     endm
  1197.  
  1198.     ifb <Size>
  1199.         ErrMsg
  1200.     else
  1201.         ifb <MemoryBlock>
  1202.             ErrMsg
  1203.         else
  1204.             ifidni  <es>, <MemoryBlock>
  1205.                 ; Do nothing
  1206.             else
  1207.                 LoadSegment <es>, <MemoryBlock>
  1208.             endif
  1209.             mov     bx, Size
  1210.             DosCall DOS_MODIFY_MEMORY
  1211.         endif
  1212.     endif
  1213. endm
  1214.  
  1215. macro   Exec    Type, ParmSeg, ParmOfs, ProgramSeg, ProgramOfs
  1216.     macro   ErrMsg
  1217.         display "Caller must provide Type and address parameters to Exec."
  1218.         err
  1219.     endm
  1220.  
  1221.     ifb <Type>
  1222.         ErrMsg
  1223.     else
  1224.         ifb <ParmSeg>
  1225.             ErrMsg
  1226.         else
  1227.             ifb <ParmOfs>
  1228.                 ErrMsg
  1229.             else
  1230.                 ifb <ProgramSeg>
  1231.                     ErrMsg
  1232.                 else
  1233.                     ifb <ProgramOfs>
  1234.                         ErrMsg
  1235.                     else
  1236.                         mov     al, Type
  1237.                         LoadSegment <es>, <ParmSeg>
  1238.                         mov     bx, ParmOfs
  1239.                         LoadSegment <ds>, <ProgramSeg>
  1240.                         mov     dx, ProgramOfs
  1241.                         DosCall <DOS_EXEC>
  1242.                     endif
  1243.                 endif
  1244.             endif
  1245.         endif
  1246.     endif
  1247. endm
  1248.  
  1249. macro   TerminateProgram    ErrorLevel
  1250.     ifnb    <ErrorLevel>
  1251.         mov al, ErrorLevel      ; Return optional errorlevel to DOS
  1252.     endif
  1253.     DosCall DOS_TERMINATE_EXE
  1254. endm
  1255.  
  1256. macro   GetReturnCode
  1257.     DosCall <DOS_GET_RETURN_CODE>
  1258. endm
  1259.  
  1260. macro   FindFirst   Attributes, StringSeg, StringOfs
  1261.     macro   ErrMsg
  1262.         display "You must provide Attributes and address parameters to FindFirst."
  1263.         err
  1264.     endm
  1265.  
  1266.     ifb <Attributes>
  1267.         ErrMsg
  1268.     else
  1269.         ifb <StringSeg>
  1270.             ErrMsg
  1271.         else
  1272.             ifb <StringOfs>
  1273.                 ErrMsg
  1274.             else
  1275.                 ifidni  <ds>, <StringSeg>
  1276.                     ; Do nothing
  1277.                 else
  1278.                     LoadSegment <ds>, <StringSeg>
  1279.                 endif
  1280.                 mov     dx, StringOfs
  1281.                 mov     cx, Attributes
  1282.                 DosCall DOS_FIND_FIRST
  1283.             endif
  1284.         endif
  1285.     endif
  1286. endm
  1287.  
  1288. macro   FindNext
  1289.     DosCall DOS_FIND_NEXT
  1290. endm
  1291.  
  1292. macro   GetVerifyFlag
  1293.     DosCall <DOS_GET_VERIFY_FLAG>
  1294. endm
  1295.  
  1296. macro   RenameFile  OrigSeg, OrigOfs, NewSeg, NewOfs
  1297.     macro   ErrMsg
  1298.         display "Caller must provide address parameters to RenameFile."
  1299.         err
  1300.     endm
  1301.  
  1302.     ifb <OrigSeg>
  1303.         ErrMsg
  1304.     else
  1305.         ifb <OrigOfs>
  1306.             ErrMsg
  1307.         else
  1308.             ifb <NewSeg>
  1309.                 ErrMsg
  1310.             else
  1311.                 ifb <NewOfs>
  1312.                     ErrMsg
  1313.                 else
  1314.                     LoadSegment <es>, <NewSeg>
  1315.                     LoadSegment <ds>, <OrigSeg>
  1316.                     mov     dx, OrigOfs
  1317.                     mov     di, NewOfs
  1318.                     DosCall <DOS_RENAME_FILE>
  1319.                 endif
  1320.             endif
  1321.         endif
  1322.     endif
  1323. endm
  1324.  
  1325. macro   GetSetFileDateTime  GetSet, Handle, Time, Date
  1326.     macro   ErrMsg
  1327.         display "Caller must provide GetSet and Handle parameters to GetSetFileDateTime."
  1328.         err
  1329.     endm
  1330.  
  1331.     ifb <GetSet>
  1332.         ErrMsg
  1333.     else
  1334.         ifb <Handle>
  1335.             ErrMsg
  1336.         else
  1337.             ifnb    <Time>
  1338.                 mov     cx, Time
  1339.                 ifb <Date>
  1340.                     display "You must provide the Date parameter to GetSetFileDateTime."
  1341.                     err
  1342.                 else
  1343.                     mov     dx, Date
  1344.                 endif
  1345.                 mov     bx, Handle
  1346.                 mov     al, GetSet
  1347.                 DosCall <DOS_GET_SET_DATE_TIME>
  1348.             endif
  1349.         endif
  1350.     endif
  1351. endm
  1352.  
  1353. macro   GetSetAllocationStrategy
  1354.     DosCall <DOS_GET_SET_ALLOCATION>
  1355. endm
  1356. macro   GetExtendedErrors
  1357.     xor     bx, bx
  1358.     DosCall <DOS_GET_EXTENDED_ERRORS>
  1359. endm
  1360.  
  1361. macro   CreateTemporaryFile Attribute, FilenameSeg, FilenameOfs
  1362.     macro   ErrMsg
  1363.         display "Caller must provide Attribute and address parameters to CreateTemporaryFile."
  1364.         err
  1365.     endm
  1366.  
  1367.     ifb <Attribute>
  1368.         ErrMsg
  1369.     else
  1370.         ifb <FilenameSeg>
  1371.             ErrMsg
  1372.         else
  1373.             ifb <FilenameOfs>
  1374.                 ErrMsg
  1375.             else
  1376.                 LoadSegment <ds>, <FilenameSeg>
  1377.                 mov     dx, FilenameOfs
  1378.                 mov     cx, Attribute
  1379.                 DosCall <DOS_CREATE_TEMP_FILE>
  1380.             endif
  1381.         endif
  1382.     endif
  1383. endm
  1384.  
  1385. macro   CreateNewFile   Attribute, FilenameSeg, FilenameOfs
  1386.     macro   ErrMsg
  1387.         display "Caller must provide Attribute and address parameters to CreateNewFile."
  1388.         err
  1389.     endm
  1390.  
  1391.     ifb <Attribute>
  1392.         ErrMsg
  1393.     else
  1394.         ifb <FilenameSeg>
  1395.             ErrMsg
  1396.         else
  1397.             ifb <FilenameOfs>
  1398.                 ErrMsg
  1399.             else
  1400.                 LoadSegment <ds>, <FilenameSeg>
  1401.                 mov     dx, FilenameOfs
  1402.                 mov     cx, Attribute
  1403.                 DosCall <DOS_CREATE_NEW_FILE>
  1404.             endif
  1405.         endif
  1406.     endif
  1407. endm
  1408.  
  1409. macro   ControlFileAccess   LockUnlock, Handle, OffsetHigh, OffsetLow, LengthHigh, LengthLow
  1410.     macro   ErrMsg
  1411.         display "Caller must provide the function, file handle, record position and size"
  1412.         display "parameters to ControlFileAccess."
  1413.         err
  1414.     endm
  1415.  
  1416.     ifb <LockUnlock>
  1417.         ErrMsg
  1418.     else
  1419.         ifb <Handle>
  1420.             ErrMsg
  1421.         else
  1422.             ifb <OffsetHigh>
  1423.                 ErrMsg
  1424.             else
  1425.                 ifb <OffsetLow>
  1426.                     ErrMsg
  1427.                 else
  1428.                     ifb <LengthHigh>
  1429.                         ErrMsg
  1430.                     else
  1431.                         ifb <LengthLow>
  1432.                             ErrMsg
  1433.                         else
  1434.                             mov     al, LockUnlock
  1435.                             mov     bx, Handle
  1436.                             mov     cx, OffsetHigh
  1437.                             mov     dx, OffsetLow
  1438.                             mov     si, LengthHigh
  1439.                             mov     di, LengthLow
  1440.                             DosCall <DOS_CONTROL_ACCESS>
  1441.                         endif
  1442.                     endif
  1443.                 endif
  1444.             endif
  1445.         endif
  1446.     endif
  1447. endm
  1448.  
  1449. macro   GetMachineName  BufferSeg, BufferOfs
  1450.     macro   ErrMsg
  1451.         display "Caller must provide buffer address parameters to GetMachineName."
  1452.         err
  1453.     endm
  1454.  
  1455.     ifb <BufferSeg>
  1456.         ErrMsg
  1457.     else
  1458.         ifb <BufferOfs>
  1459.             ErrMsg
  1460.         else
  1461.             LoadSegment <ds>, <BufferSeg>
  1462.             mov     dx, BufferOfs
  1463.             xor     al, al
  1464.             DosCall <NET_GET_MACHINE_NAME>
  1465.         endif
  1466.     endif
  1467. endm
  1468.  
  1469. macro   SetupPrinter    BufferSeg, BufferOfs, ListIndex, StrLength
  1470.     macro   ErrMsg
  1471.         display "Caller must provide buffer address, Index and length parameters"
  1472.         display "to SetupPrinter."
  1473.         err
  1474.     endm
  1475.  
  1476.     ifb <BufferSeg>
  1477.         ErrMsg
  1478.     else
  1479.         ifb <BufferOfs>
  1480.             ErrMsg
  1481.         else
  1482.             ifb <ListIndex>
  1483.                 ErrMsg
  1484.             else
  1485.                 ifb <StrLength>
  1486.                     ErrMsg
  1487.                 else
  1488.                     mov     al, 2
  1489.                     mov     bx, ListIndex
  1490.                     mov     cx, StrLength
  1491.                     LoadSegment <ds>, <BufferSeg>
  1492.                     mov     si, BufferOfs
  1493.                     DosCall <NET_SET_PRINTER_SETUP>
  1494.                 endif
  1495.             endif
  1496.         endif
  1497.     endif
  1498. endm
  1499.  
  1500. macro   GetPrinterSetup BufferSeg, BufferOfs, ListIndex
  1501.     macro   ErrMsg
  1502.         display "Caller must provide buffer address and Index parameters GetPrinterSetup."
  1503.         err
  1504.     endm
  1505.  
  1506.     ifb <BufferSeg>
  1507.         ErrMsg
  1508.     else
  1509.         ifb <BufferOfs>
  1510.             ErrMsg
  1511.         else
  1512.             ifb <ListIndex>
  1513.                 ErrMsg
  1514.             else
  1515.                 mov     al, 3
  1516.                 mov     bx, ListIndex
  1517.                 LoadSegment <es>, <BufferSeg>
  1518.                 mov     di, BufferOfs
  1519.                 DosCall <NET_GET_PRINTER_SETUP>
  1520.             endif
  1521.         endif
  1522.     endif
  1523. endm
  1524.  
  1525. macro   GetListEntry    ListIndex, DeviceSeg, DeviceOfs, NetworkSeg, NetworkOfs
  1526.     macro   ErrMsg
  1527.         display "Caller must provide ListIndex and buffer address parameters to GetListEntry."
  1528.         err
  1529.     endm
  1530.  
  1531.     ifb <ListIndex>
  1532.         ErrMsg
  1533.     else
  1534.         ifb <DeviceSeg>
  1535.             ErrMsg
  1536.         else
  1537.             ifb <DeviceOfs>
  1538.                 ErrMsg
  1539.             else
  1540.                 ifb <NetworkSeg>
  1541.                     ErrMsg
  1542.                 else
  1543.                     ifb <NetworkOfs>
  1544.                         ErrMsg
  1545.                     else
  1546.                         mov     al, 2
  1547.                         mov     bx, ListIndex
  1548.                         LoadSegment <ds>, <DeviceSeg>
  1549.                         LoadSegment <es>, <NetworkSeg>
  1550.                         mov     si, DeviceOfs
  1551.                         mov     di, NetworkOfs
  1552.                         DosCall <NET_GET_REDIRECTION_LIST>
  1553.                     endif
  1554.                 endif
  1555.             endif
  1556.         endif
  1557.     endif
  1558. endm
  1559.  
  1560. macro   GetListEntry    Type, Save, DeviceSeg, DeviceOfs, NetworkSeg, NetworkOfs
  1561.     macro   ErrMsg
  1562.         display "Caller must provide ListIndex and buffer address parameters to GetListEntry."
  1563.         err
  1564.     endm
  1565.  
  1566.     ifb <Type>
  1567.         ErrMsg
  1568.     else
  1569.         ifb <Save>
  1570.             ErrMsg
  1571.             ifb <DeviceSeg>
  1572.                 ErrMsg
  1573.             else
  1574.                 ifb <DeviceOfs>
  1575.                     ErrMsg
  1576.                 else
  1577.                     ifb <NetworkSeg>
  1578.                         ErrMsg
  1579.                     else
  1580.                         ifb <NetworkOfs>
  1581.                             ErrMsg
  1582.                         else
  1583.                             mov     al, 3
  1584.                             mov     bl, Type
  1585.                             mov     cx, Save
  1586.                             LoadSegment <ds>, <DeviceSeg>
  1587.                             LoadSegment <es>, <NetworkSeg>
  1588.                             mov     si, DeviceOfs
  1589.                             mov     di, NetworkOfs
  1590.                             DosCall <NET_REDIRECT_DEVICE>
  1591.                         endif
  1592.                     endif
  1593.                 endif
  1594.             endif
  1595.         endif
  1596.     endif
  1597. endm
  1598.  
  1599. macro   GetListEntry    DeviceSeg, DeviceOfs
  1600.     macro   ErrMsg
  1601.         display "Caller must provide ListIndex and buffer address parameters to GetListEntry."
  1602.         err
  1603.     endm
  1604.  
  1605.     ifb <DeviceSeg>
  1606.         ErrMsg
  1607.     else
  1608.         ifb <DeviceOfs>
  1609.             ErrMsg
  1610.         else
  1611.             mov     al, 4
  1612.             mov     cx, Save
  1613.             LoadSegment <ds>, <DeviceSeg>
  1614.             mov     si, DeviceOfs
  1615.             DosCall <NET_CANCEL_REDIRECT>
  1616.         endif
  1617.     endif
  1618. endm
  1619.  
  1620. macro   GetPSPAddress
  1621.     DosCall <DOS_GET_PSP>
  1622. endm
  1623.  
  1624. macro   LeadByteTable   Function, Console
  1625.     ifb <Function>
  1626.         display "Caller must provide Function parameter to LeadByteTable."
  1627.         err
  1628.     else
  1629.         ifnb    <Console>
  1630.             mov     dl, Console
  1631.         else
  1632.             mov     al, Function
  1633.             DosCall <DOS_GET_LEAD_BYTE_TABLE>
  1634.         endif
  1635.     endif
  1636. endm
  1637.  
  1638.